package com.hzeport.bgs22emduty.service;

import java.util.List;
import java.util.function.Supplier;

public interface CacheService {

    /**
     * 获取对象缓存，如果没有则返回supplier查询的数据并存入缓存中，参数全必填
     * @param key 获取缓存的键
     * @param supplier 当缓存不存在时从数据库查询数据的供应方法
     * @param expireTime 过期时间，设置不过期传参为：0
     * @param clazz 需要返回的对象类型
     * @param <T> 泛型
     * @return T
     */
    <T> T getSave(String key, Supplier<T> supplier,Integer expireTime,Class<T> clazz);

    /**
     * 获取列表缓存，如果没有则返回supplier查询的数据并存入缓存中，参数全必填
     * @param key 获取缓存的键
     * @param supplier 当缓存不存在时从数据库查询数据的供应方法
     * @param expireTime 过期时间，设置不过期传参为：0
     * @param clazz 需要返回的列表元素对象类型
     * @param <T> 泛型
     * @return T
     */
    <T> List<T> getSaveList(String key, Supplier<List<T>> supplier,Integer expireTime,Class<T> clazz);

    /**
     * 获取缓存
     * @param key 获取缓存的键
     * @param clazz 需要返回的对象类型
     * @param <T> 泛型
     * @return T
     */
    <T> T get(String key,Class<T> clazz);

    /**
     * 存入缓存
     * @param key 存入缓存的键
     * @param value 获取缓存的值
     * @return true/false
     */
    boolean set(String key, Object value);


    /**
     * 存入缓存，expireTime为小于等于0则为无限制
     * @param key 存入缓存的键
     * @param value 获取缓存的值
     * @param expireTime 过期时间，设置不过期传参为：0
     * @return true/false
     */
    boolean set(String key, Object value,Integer expireTime);

    /**
     * 删除缓存
     * @param key 需要删除的键
     */
    void del(String key);

    /**
     * 批量删除缓存
     * @param keys 需要删除的键
     * @return true/false
     */
    boolean del(List<String> keys);

}
